Optimisation stochastique : le recuit simulé

Dernière mise à jour : 19 Août 1999


Note : Ce texte est basé en partie sur le mémoire de DEA de Mathématiques de Mamadou Boli Ba (Université de Limoges, Juin 1998). Je remercie M. Ba pour sa collaboration.


  1. Introduction

    1. Les méthodes de descente aléatoire pure

    2. Le recuit simulé

      1. Principe
      2. Implémentation


  2. Programmation en Turbo Pascal

    1. L'unité OPTIM.PAS

      1. Types et variables globales
      2. Procédure de recuit simulé

    2. Programme de démonstration


  3. Conclusion


I. Introduction

De nombreux problèmes reviennent à chercher le minimum ou le maximum d'une fonction de plusieurs variables (un exemple typique est fourni par la régression non linéaire). L'optimisation stochastique a pour but d'approcher cet extrêmum au moyen d'une recherche aléatoire. Sous la forme du recuit simulé, elle permet en théorie de trouver l'extrêmum global de la fonction, alors que la plupart des méthodes classiques (déterministes) se limitent à un extrêmum local.

Nous n'envisagerons ici que le cas de la minimisation (puisque maximiser une fonction F revient à minimiser -F). Nous étudierons successivement :


I.A. Les méthodes de descente aléatoire pure

Soit F(X) une fonction de n variables x1, x2, ..., xn, dont on cherche le minimum (X est le vecteur des variables). Un algorithme de descente aléatoire se présenterait comme suit :

  • Choisir X0 initial ; évaluer F(X0) ; itération r := 0
  • (1) A l'itération r+1, générer un vecteur aléatoire X à partir de Xr
  • si F(X) < F(Xr) alors Xr+1 := X
  • si critère d'arrêt non vérifié alors faire r := r + 1 et aller en (1)
  • si critère d'arrêt vérifié alors arrêter ; (Xr, F(Xr)) est la solution approchée.

Le passage de Xr à X se fait par tirage aléatoire, p. ex. selon une loi normale centrée sur X (Voir le cours sur les nombres aléatoires).

L'inconvénient de cette méthode est qu'elle n'accepte que des diminutions de la fonction. L'algorithme risque ainsi de se trouver bloqué dans un minimum local.


I.B. Le recuit simulé


I.B.1. Principe

Le recuit simulé (simulated annealing) permet de sortir d'un minimum local (et donc, en théorie, d'atteindre le minimum global) en acceptant, avec une certaine probabilité, une augmentation de la fonction.

Cette technique s'inspire de la thermodynamique. En effet, les systèmes physiques atteignent rapidement leur état d'équilibre (minimum d'énergie) en dépit du nombre immense de configurations que peuvent prendre les particules constituant le système. Au cours de cette transition vers l'équilibre, l'énergie peut localement augmenter.

Or, la probabilité p pour qu'un système physique passe du niveau d'énergie E1 au niveau E2 > E1 est donnée par la loi de Boltzmann :
p = exp(-(E2 - E1) / kT)
(1)

k est la constante de Boltzmann et T la température absolue.

La probabilité d'observer une augmentation de l'énergie est donc d'autant plus grande que la température est élevée.

Dans le recuit simulé :


I.B.2. Implémentation

Un algorithme de recuit simulé se présente sous la forme générale suivante :

  • Choisir X initial
  • Calculer T0
  • tant que critère d'arrêt non vérifié faire :
    • m := 0 ;
    • répéter jusqu'à ce que m = NT (nombre d'itérations à la température T)
      • Générer un vecteur aléatoire Y voisin de X
      • dF = F(Y) - F(X)
      • Appel fonction Accepte(dF, T)
      • si Accepte est vrai alors X := Y
      • m := m + 1
    • fin répéter
    • Diminuer la température
  • fin tant que

La fonction Accepte(dF, T) se présente ainsi :

  • si dF < 0 alors
    • Accepte := vrai
  • sinon
    • A := exp(- dF / T)
    • si Random(0, 1) < A alors Accepte := vrai sinon Accepte := faux
  • fin si

où Random(0, 1) désigne un nombre aléatoire uniforme sur l'intervalle [0, 1[

Pour implémenter cet algorithme, il nous faut donc :

  1. Une procédure de détermination de la température initiale :

    Au début des itérations, alors qu'on est éloigné du minimum, on choisit une probabilité d'acceptation élevée, p.ex. p = 0,5. On peut alors effectuer un certain nombre de tirages aléatoires et calculer la valeur médiane M des augmentations de la fonction (la médiane est la valeur qui partage une distribution en deux parties égales). La température initiale T0 s'en déduit par :

    p = exp(- M / T0) = 0,5

    d'où :

    T0 = - M / ln p ~ 1,44 M

  2. Un schéma de décroissance de la température (le "recuit") :

    On choisit habituellement une décroissance géométrique :

    Tn+1 = RT Tn

    soit :

    Tn= T0 (RT)n
    (2)
  3. Un critère d'arrêt :

    On peut arrêter les itérations lorsque la température est devenue inférieure à une fraction donnée de la température initiale, p. ex. Tn < 10-6 T0

Il ne s'agit là que de l'algorithme de base. De nombreuses améliorations sont possibles (voir p.ex. le programme ASA de Lester Ingber).


II. Programmation en Turbo Pascal

L'optimisation par le recuit simulé peut être réalisé au moyen de la bibliothèque TP MATH.


II.A. L'unité OPTIM.PAS

L'unité OPTIM.PAS, contenue dans TPMATH1.ZIP, fournit une procédure de recuit simulé, ainsi que quelques méthodes déterministes :

Note : ces deux dernières méthodes seront décrites dans un autre cours.


II.A.1. Types et variables globales